package br.com.smachado.calcados.ui.produto;

import br.com.smachado.calcados.comuns.AppConstantes;
import br.com.smachado.calcados.entity.Fornecedor;
import br.com.smachado.calcados.entity.Grade;
import br.com.smachado.calcados.entity.Produto;
import br.com.smachado.calcados.entity.TipoProduto;
import br.com.smachado.calcados.repository.TipoProdutoRepository;
import br.com.smachado.calcados.service.ProdutoService;
import br.com.smachado.calcados.util.MensagemUtil;
import br.com.smachado.calcados.util.PropertiesUtil;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;

/**
 * Formulário de cadastro de fornecedores
 * @author gu
 */
public class JDialogCadastroProduto extends javax.swing.JDialog {
    
    //TODO: verificar uso da lista e model
    private ProdutoService service = new ProdutoService();
    private Produto produto = new Produto();
    private TipoProdutoRepository tipoProdutoRepository = new TipoProdutoRepository();
    private DefaultTableModel tableModelProduto; 
    private List<Produto> listaProduto;

    /**
     * Creates new form JFrameCadastroFornecedor
     */
    public JDialogCadastroProduto(JFrame parent, boolean modal) {
        super(parent, PropertiesUtil.getString("label.titulo.form.cadastro.produto"), true);
        initComponents();
    }

    public JDialogCadastroProduto(JFrame parent, DefaultTableModel tableModelProduto, 
            List<Produto> listaProduto, Produto produto) {
        super(parent, PropertiesUtil.getString("label.titulo.form.cadastro.produto"), true);
        this.tableModelProduto = tableModelProduto;
        this.produto = produto;
        this.listaProduto = listaProduto;
        initComponents();
        this.definirValores(produto);
    }
    
    /**
     * Define os valores dos campos do formulário
     * @param produto 
     */
    private void definirValores(Produto produto) {
        if(produto.getId() != null){
            codigo.setText(String.valueOf(produto.getId()));
        }
        referencia.setText(produto.getReferencia());
        comboFornecedor.setSelectedItem(produto.getFornecedor());
        comboTiposProduto.setSelectedItem(produto.getTipoProduto());
        
        BigDecimal valCompra = produto.getValorCompra();
        valorCompra.setText(valCompra != null 
                ? valCompra.toString()
                : null);
        
        BigDecimal ultValorCompra = produto.getUltimoValorCompra();
        ultimoValorCompra.setText(ultValorCompra != null 
                ? ultValorCompra.toString()
                : null);
        
        if(CollectionUtils.isNotEmpty(produto.getGrade())){
            DefaultTableModel dtm = (DefaultTableModel) tabelaGrade.getModel();
            for (Grade itemGrade : produto.getGrade()) {
                Object[] linha = new Object[]{
                    itemGrade.getCorMaterial(),
                    itemGrade.getTamanho(),
                    itemGrade.getQuantidade(),
                    itemGrade.getValor()
                };
                dtm.addRow(linha);
            }
        }
        
        botaoExcluir.setEnabled(true);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        panelFornecedor = new javax.swing.JPanel();
        labelCodigo = new javax.swing.JLabel();
        labelReferencia = new javax.swing.JLabel();
        labelValorCompra = new javax.swing.JLabel();
        codigo = new javax.swing.JTextField();
        referencia = new javax.swing.JTextField();
        valorCompra = new javax.swing.JTextField();
        botaoCadastrar = new javax.swing.JButton();
        botaoExcluir = new javax.swing.JButton();
        botaoCancelar = new javax.swing.JButton();
        labelTipoProduto = new javax.swing.JLabel();
        comboTiposProduto = new javax.swing.JComboBox();
        labelFornecedor = new javax.swing.JLabel();
        comboFornecedor = new javax.swing.JComboBox();
        labelValorCompra1 = new javax.swing.JLabel();
        ultimoValorCompra = new javax.swing.JTextField();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        tabelaGrade = new javax.swing.JTable();
        botaoNovaGrade = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        panelFornecedor.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));

        labelCodigo.setText(PropertiesUtil.getString("label.codigo"));

        labelReferencia.setForeground(java.awt.Color.red);
        labelReferencia.setText(PropertiesUtil.getString("label.referencia"));

        labelValorCompra.setForeground(java.awt.Color.red);
        labelValorCompra.setText(PropertiesUtil.getString("label.valorCompra"));

        codigo.setEditable(false);

        botaoCadastrar.setText(PropertiesUtil.getString("label.salvar"));
        botaoCadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCadastrarActionPerformed(evt);
            }
        });

        botaoExcluir.setText(PropertiesUtil.getString("label.excluir"));
        botaoExcluir.setEnabled(false);
        botaoExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoExcluirActionPerformed(evt);
            }
        });

        botaoCancelar.setText(PropertiesUtil.getString("label.cancelar"));
        botaoCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoCancelarActionPerformed(evt);
            }
        });

        labelTipoProduto.setForeground(java.awt.Color.red);
        labelTipoProduto.setText(PropertiesUtil.getString("label.tipoDoProduto"));

        comboTiposProduto.setModel(recuperarTiposProduto());

        labelFornecedor.setForeground(java.awt.Color.red);
        labelFornecedor.setText(PropertiesUtil.getString("label.fornecedor"));

        comboFornecedor.setModel(recuperarFornecedores());

        labelValorCompra1.setText(PropertiesUtil.getString("label.ultimoValorCompra"));

        ultimoValorCompra.setEditable(false);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(""), PropertiesUtil.getString("label.grade")));

        jScrollPane2.setBorder(null);

        tabelaGrade.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "", "", "", ""
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.Object.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        tabelaGrade.setColumnSelectionAllowed(true);
        jScrollPane2.setViewportView(tabelaGrade);
        tabelaGrade.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tabelaGrade.getColumnModel().getColumn(0).setHeaderValue(PropertiesUtil.getString("label.corMaterial"));
        tabelaGrade.getColumnModel().getColumn(1).setHeaderValue(PropertiesUtil.getString("label.tamanho"));
        tabelaGrade.getColumnModel().getColumn(2).setHeaderValue(PropertiesUtil.getString("label.quantidade"));
        tabelaGrade.getColumnModel().getColumn(3).setHeaderValue(PropertiesUtil.getString("label.valorUnitario"));

        botaoNovaGrade.setText(PropertiesUtil.getString("label.novo"));
        botaoNovaGrade.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoNovaGradeActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addComponent(botaoNovaGrade))
            .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 508, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addComponent(botaoNovaGrade)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 12, Short.MAX_VALUE)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        javax.swing.GroupLayout panelFornecedorLayout = new javax.swing.GroupLayout(panelFornecedor);
        panelFornecedor.setLayout(panelFornecedorLayout);
        panelFornecedorLayout.setHorizontalGroup(
            panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelFornecedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(panelFornecedorLayout.createSequentialGroup()
                        .addGap(0, 0, Short.MAX_VALUE)
                        .addComponent(botaoExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botaoCancelar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botaoCadastrar, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelFornecedorLayout.createSequentialGroup()
                        .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(valorCompra, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(labelValorCompra)
                            .addComponent(codigo, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(labelCodigo)
                            .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(labelFornecedor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(comboFornecedor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(ultimoValorCompra, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(labelValorCompra1)
                            .addGroup(panelFornecedorLayout.createSequentialGroup()
                                .addGap(3, 3, 3)
                                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(referencia, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(labelReferencia)))
                            .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                .addComponent(labelTipoProduto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(comboTiposProduto, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(86, 86, 86)))
                .addContainerGap())
        );
        panelFornecedorLayout.setVerticalGroup(
            panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelFornecedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelCodigo)
                    .addComponent(labelReferencia))
                .addGap(3, 3, 3)
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(referencia, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(codigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(panelFornecedorLayout.createSequentialGroup()
                        .addComponent(labelTipoProduto)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(comboTiposProduto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelFornecedorLayout.createSequentialGroup()
                        .addComponent(labelFornecedor)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(comboFornecedor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(18, 18, 18)
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(labelValorCompra)
                    .addComponent(labelValorCompra1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(valorCompra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(ultimoValorCompra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(panelFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botaoCadastrar)
                    .addComponent(botaoExcluir)
                    .addComponent(botaoCancelar))
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelFornecedor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelFornecedor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Ação do botão Cadastrar
     * @param evt 
     */
    private void botaoCadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoCadastrarActionPerformed
        evt.toString();
        
        try {

            boolean isInclusao = null == produto.getId();

            produto.setFornecedor((Fornecedor)comboFornecedor.getSelectedItem());
            produto.setTipoProduto((TipoProduto) comboTiposProduto.getSelectedItem());
            String valorCompraStr = valorCompra.getText();
            produto.setValorCompra(StringUtils.isNotBlank(valorCompraStr)
                    ? new BigDecimal(valorCompraStr) 
                    : null);
            produto.setReferencia(referencia.getText());
            
            DefaultTableModel tableModelGrade = (DefaultTableModel) tabelaGrade.getModel();
            if(tableModelGrade.getColumnCount() > 0){
                List<Grade> listaGrade = new ArrayList<Grade>();
                for (Iterator<Vector> iterator = tableModelGrade.getDataVector().iterator(); iterator.hasNext();) {
                    Vector itemGrade = iterator.next();
                    Grade grade = new Grade();
                    grade.setCorMaterial((String)itemGrade.get(0));
                    grade.setTamanho((String)itemGrade.get(1));
                    grade.setQuantidade((Integer)itemGrade.get(2));
                    grade.setValor(itemGrade.get(3) != null ? new BigDecimal((String)itemGrade.get(3)) : null);
                    grade.setProduto(produto);
                    listaGrade.add(grade);
                }
                produto.setGrade(listaGrade);
            }
            
            if (this.validarCampos(produto)) {
                
                String ultimoValorCompraStr = ultimoValorCompra.getText();
                produto.setUltimoValorCompra(StringUtils.isNotBlank(ultimoValorCompraStr) 
                        ? new BigDecimal(ultimoValorCompraStr) 
                        : new BigDecimal(valorCompraStr));
                
                service.salvar(produto);
                MensagemUtil.exibeMensagemSucesso(this, PropertiesUtil.getString(
                        "msg.registro.gravado.sucesso"));
                
                Object[] linha = new Object[]{
                    produto.getId(),
                    produto.getReferencia(),
                    produto.getNomeFornecedor()
                };

                if (isInclusao) {
                    tableModelProduto.addRow(linha);
                    listaProduto.add(produto);
                }

                this.dispose();
            }

        } catch (Exception e) {
            MensagemUtil.exibeMensagemErro(this, e.toString());
        }

    }//GEN-LAST:event_botaoCadastrarActionPerformed

    /**
     * Ação do botão Excluir
     * @param evt 
     */
    private void botaoExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoExcluirActionPerformed
        evt.toString();
        
        try {

            service.excluir(produto);
            MensagemUtil.exibeMensagemSucesso(this, PropertiesUtil.getString(
                    "msg.registro.excluido.sucesso"));
            this.tableModelProduto.removeRow(listaProduto.indexOf(produto));
            this.dispose();

        } catch (Exception e) {
            MensagemUtil.exibeMensagemErro(this, e.toString());
        }
    }//GEN-LAST:event_botaoExcluirActionPerformed

    /**
     * Ação do botão Cancelar
     * @param evt 
     */
    private void botaoCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoCancelarActionPerformed
        evt.toString();
        this.dispose();
    }//GEN-LAST:event_botaoCancelarActionPerformed

    private void botaoNovaGradeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botaoNovaGradeActionPerformed
        evt.toString();
        DefaultTableModel dtm = (DefaultTableModel) tabelaGrade.getModel();
        dtm.addRow(new Object[4]);
    }//GEN-LAST:event_botaoNovaGradeActionPerformed

    /**
     * Validação dos campos do formulário
     * @param produto
     * @return 
     */
    private boolean validarCampos(Produto produto) {
        
        StringBuilder retorno = new StringBuilder(
                PropertiesUtil.getString("label.campo.obrigatorio"));
        
        boolean validacao = true;
        
        if(StringUtils.isBlank(produto.getReferencia())){
            retorno.append(labelReferencia.getText());
            retorno.append(AppConstantes.QUEBRA_LINHA);
            validacao = false;
        }
        
        if(null == produto.getFornecedor()){
            retorno.append(labelFornecedor.getText());
            retorno.append(AppConstantes.QUEBRA_LINHA);
            validacao = false;
        }
        
        if(null == produto.getTipoProduto()){
            retorno.append(labelTipoProduto.getText());
            retorno.append(AppConstantes.QUEBRA_LINHA);
            validacao = false;
        }
        
        if(null == produto.getValorCompra()){
            retorno.append(labelValorCompra.getText());
            retorno.append(AppConstantes.QUEBRA_LINHA);
            validacao = false;
        }
        
        if(CollectionUtils.isNotEmpty(produto.getGrade())){
            int linha = 1;
            retorno.append(AppConstantes.QUEBRA_LINHA);
            for (Grade itemGrade : produto.getGrade()) {
                
                if(StringUtils.isBlank(itemGrade.getCorMaterial())){
                    retorno.append(PropertiesUtil.getString(
                            "msg.obrigatorio.detalhe", 
                            PropertiesUtil.getString("label.corMaterial"),
                            linha)
                            );
                    retorno.append(AppConstantes.QUEBRA_LINHA);
                    validacao = false;
                }
                
                if(StringUtils.isBlank(itemGrade.getTamanho())){
                    retorno.append(PropertiesUtil.getString(
                            "msg.obrigatorio.detalhe", 
                            PropertiesUtil.getString("label.tamanho"),
                            linha)
                            );
                    retorno.append(AppConstantes.QUEBRA_LINHA);
                    validacao = false;
                }
                
                if(null == itemGrade.getQuantidade()){
                    retorno.append(PropertiesUtil.getString(
                            "msg.obrigatorio.detalhe", 
                            PropertiesUtil.getString("label.quantidade"),
                            linha)
                            );
                    retorno.append(AppConstantes.QUEBRA_LINHA);
                    validacao = false;
                }
                
                if(null == itemGrade.getValor()){
                    retorno.append(PropertiesUtil.getString(
                            "msg.obrigatorio.detalhe", 
                            PropertiesUtil.getString("label.valorUnitario"),
                            linha)
                            );
                    retorno.append(AppConstantes.QUEBRA_LINHA);
                    validacao = false;
                }
                
            }
        }
        
        if(!validacao){
            MensagemUtil.exibeMensagemErro(this, retorno.toString());
            return false;
        }
        
        return true;
    }
    
    private DefaultComboBoxModel recuperarTiposProduto(){
        List<TipoProduto> tiposProduto = 
            (List) tipoProdutoRepository.listarTodos(TipoProduto.class);
        return new DefaultComboBoxModel(tiposProduto.toArray());
        
    }
    
    private DefaultComboBoxModel recuperarFornecedores(){
        List<Fornecedor> fornecedores = 
            (List) tipoProdutoRepository.listarTodos(Fornecedor.class);
        return new DefaultComboBoxModel(fornecedores.toArray());
        
    }
    
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botaoCadastrar;
    private javax.swing.JButton botaoCancelar;
    private javax.swing.JButton botaoExcluir;
    private javax.swing.JButton botaoNovaGrade;
    private javax.swing.JTextField codigo;
    private javax.swing.JComboBox comboFornecedor;
    private javax.swing.JComboBox comboTiposProduto;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel labelCodigo;
    private javax.swing.JLabel labelFornecedor;
    private javax.swing.JLabel labelReferencia;
    private javax.swing.JLabel labelTipoProduto;
    private javax.swing.JLabel labelValorCompra;
    private javax.swing.JLabel labelValorCompra1;
    private javax.swing.JPanel panelFornecedor;
    private javax.swing.JTextField referencia;
    private javax.swing.JTable tabelaGrade;
    private javax.swing.JTextField ultimoValorCompra;
    private javax.swing.JTextField valorCompra;
    // End of variables declaration//GEN-END:variables
}
